/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import dao.Dao;
import dao.ObservacaoJpaController;
import dominio.Observacao;
import dominio.PesquisaObservacao;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author igo
 */
public class ObservacaoNegocio implements Negocio {

    private final String MS01 = "Observacao Inserida com Sucesso!";
    private final String MS02 = "Preencha Todos os Campos Obrigatorios";
    private final String MS03 = "Observacao Alterada com Sucesso";
    private final String MS04 = "Nada Encontrado";
    private final String MS05 = "Erro no Banco de Dados. Tente mais tarde!";
    private final int numCamposObr = 2;
    private String mensagem;
    private Dao dao;

    public ObservacaoNegocio() {
        dao = new ObservacaoJpaController();
    }

    public boolean inserir(Object objeto) {
        if (objeto == null) {
            setMensagem("Observação nula");
            return false;
        }
        Observacao observacao = (Observacao) objeto;

        if (camposObrigatorios(observacao) < numCamposObr) {
            mensagem = MS02;
            return false;
        }

        if (observacao.getId() != null) {
            setMensagem("Observação já existe");
            return false;
        }

        try {
            dao.create(observacao);
            mensagem = MS01;
        } catch (Exception e) {
            System.out.println(e.toString());
            mensagem = MS05;
            return false;
        }
        return true;
    }

    private int camposObrigatorios(Observacao aluno) {
        int i = 0;

        if (aluno.getDataObs() != null) {
            i++;
        }

        if (aluno.getTexto() != null) {
            i++;
        }

        return i;
    }

    public boolean alterar(Object objeto) {
        if (objeto == null) {
            mensagem = "Observação nula";
            return false;
        }
        Observacao aluno = (Observacao) objeto;
        if (!(camposObrigatorios(aluno) < numCamposObr)) {
            if (aluno.getId() != null) {
                try {
                    dao.edit(aluno);
                    mensagem = MS03;
                    return true;
                } catch (Exception e) {
                    mensagem = MS05;
                }
            } else {
                mensagem = "Observação não existe!";
            }
        } else {
            mensagem = MS02;
        }
        return false;
    }

    /**
     *
     * @return List com todos os alunos
     */
    public List listar() {
        List res;
        try {
            res = dao.findObjectEntities();
        } catch (Exception e) {
            mensagem = MS05;
            return null;
        }
        return res;
    }

    /**
     *
     * @param PesquisaObservacao pesquisador
     * @return Lista com todos os objetos Observacao existentes no banco de dados que
     * tenham o id do aluno carregado no objeto ControladorAluno e estejam entre as
     * duas datas fornecidas. Caso não seja informada a dataInicial a lista conterá
     * todos os objetos que tenham data anterior à data final, caso não seja fornecida
     * a dataFinal a lista conterá todos os objetos que tenham data posterior à dataInicial
     * e caso não seja formecida nenhuma data, a lista conterá todos os objetos existentes
     * no banco de dados com o id do objeto Aluno carregado pelo ControladorAluno
     */
    public List<Object> pesquisar(Object objeto) {
        if (objeto == null) {
            mensagem = "Observação nula";
            return null;
        }

        PesquisaObservacao pesquisador = (PesquisaObservacao) objeto;

        List res = new ArrayList<Observacao>();

        try {
            res = dao.pesquisar(pesquisador);
        } catch (Exception e) {
            mensagem = MS05;
            return null;
        }

        if (res.isEmpty()) {
            mensagem = MS04;
            /*
             * retornará null para facilitar a organização do controlador da janela
             * assim, toda vez q esse método retornar null, o controlador da janela
             * virá buscar a mensagem.
             */
            return null;
        }

        return res;
    }

    public String getMensagem() {
        return mensagem;
    }

    /**
     * @param mensagem the mensagem to set
     */
    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    /*
     * Este método que não existe no CDU, mas como está na interface
     * Negocio teve que ser implementado
     */
    public boolean excluir(Object objeto) {
        return false;
    }
}
